import com.sun.jdi.ArrayReference;

import java.util.Arrays;
import java.util.Scanner;

public class note_arr {


    //1.数组拷贝;
    //三种方法

    public static void main1(String[] args) {

        //1.Arrays.copyOf(arr,arr.length);
//        int[] arr={1,2,3,4,5,6};
//
//        int[] arr2= Arrays.copyOf(arr,arr.length);
//
//        System.out.println(Arrays.toString(arr2));

        //2.Arrays.copyOfRange(arr,from,to)
//        int[] arr={1,2,3,4,5,6};
//
//        int[] arr2=Arrays.copyOfRange(arr,2,5);
//        System.out.println(Arrays.toString(arr2));


        //3.System.arraycopy()


        int[] arr={1,2,3,4,5,6};
        int[] arr2=new int[10];
        System.arraycopy(arr,2,arr2,2,3);
        System.out.println(Arrays.toString(arr2));
    }



    //2.数组排序，二分查找
    public static void main2(String[] args) {

        int[] arr={1,3,4,7,98,6,7,34,90,32};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        System.out.print("请输入要查找的数字：");
        Scanner cin=new Scanner(System.in);
        int x= cin.nextInt();
        int left=0;
        int right=arr.length-1;
        while(left<=right){
            int mid=left+(right-left)/2;
            if(arr[mid]>x){
                right=mid-1;
            }
            else if(arr[mid]<x){
                left=mid+1;
            }
            else{
                System.out.println("下标为：["+mid+"]");
                break;
            }
        }
    }



    //3.冒泡排序
    public static void main3(String[] args) {
            int[] arr={2,5,1,43,34,26,65,12,11,45,64,20};
            for(int i=0;i<arr.length-1;i++){
                int count=0;
                for(int j=0;j<arr.length-1-i;j++){

                    if(arr[j]>arr[j+1]){
                        int temp=arr[j+1];
                        arr[j+1]=arr[j];
                        arr[j]=temp;
                        count=1;
                    }
                }
                if(count==0){
                    break;
                }
            }
        System.out.println(Arrays.toString(arr));
    }


    //4.数组逆序
    public static void main4(String[] args) {
        int[] arr={1,3,5,7,9,11};
        int left=0;
        int right=arr.length-1;
        while(left<right){
            int t=arr[left];
            arr[left]=arr[right];
            arr[right]=t;
            left++;
            right--;
        }
        System.out.println(Arrays.toString(arr));
    }



    //5.定义二维数组
    public static void main5(String[] args) {
        int[][] arr={{1,2},{23,4,6},{6,7}};
        int[][] arr2=new int[][]{{2,3},{5,7}};
        int[][] arr3=new int[2][3];
    }


    //6.打印二维数组
    public static void main6(String[] args) {
        int[][] arr={{1,2},{23,4,6},{6,7}};
//法1：
//        for(int i=0;i< arr.length;i++){
//            for(int j=0;j<arr[i].length;j++){
//                System.out.print(arr[i][j]+" ");
//            }
//            System.out.println();
//        }


    //法2：
        for(int[] x:arr){
            for(int y:x){
                System.out.print(y+" ");
            }
            System.out.println();
        }
    }



    //7.二维数组定义时列的初始化问题
    public static void main7(String[] args) {
        int[][] arr=new int[2][];
//        arr[0]=new int[25];
//        arr[1]=new int[34];
        //如果不定义上述行的对象，那么该数组arr[0],arr[1]实际指向两个null，null是一个无效的内存位置，不能对这个内存进行读写操作
    }



    //8.判断两个数组是否相同

    public static void main8(String[] args) {
        int[] arr={1,2,3};
        int[] arr2={1,5,3};
        Boolean flg= Arrays.equals(arr,arr2);
        System.out.println(flg);
    }

    //9.指定数组内范围位置为某一值
    public static void main(String[] args) {
        int[] arr={1,3,4,5,6,7,8};
        System.out.println(Arrays.toString(arr));
        Arrays.fill(arr,3,6,-1);
        System.out.println(Arrays.toString(arr));
    }


    //10.数组元素为引用类型的深浅拷贝问题
    public static void main10(String[] args) {

    }
}
